프로세스마다 PID가 존재하고 해당 프로세스의 정보가 담긴 PCB가 존재한다.(메모리에 업로드 되어 있음)
프로세스와 유사한 시스템이 파일에도 적용되어 있다.
파일마다 고유한 inode가 존재하고 각각의 inode에 대응하는 inode 구조체가 있다.
mode 파일 종류/권한(root)
inode 메타 데이터-stat 함수
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int stat(const char* path, struct stat* buf);
int fstat(int filedes, struct stat* buf);
stat은 파일의 이름(주소 포함)을 입력으로 받고 fstat은 파일 디스크립트를 입력으로 받는다.
fopen, read, write 등 기본 파일 시스템콜도 기억할 것!
stat struct
struct stat{
dev_t st_dev;
ino_t st_ino;
mode_t st_mode;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
dev_t st_rdev;
off_t st_size;
blksize_t st_blksize;
blkcnt_t st_blocks;
time_t st_atime;
time_t st_mtime;
time_t st_ctime;
};
참고: 가상 파일 시스템 -st_dev디스크와 같은 스토리지도 디렉토리 형태로 사용하지만, 실제 디렉토리는 서로 달리하여 사용 가능 -st_dev
stat_test.c
#include <stdio.h>
#include <sys/stat.h>
int main(void){
int ret=0;
struct stat buf;
ret=stat("stat_test.txt", &buf);
if(ret<0){
printf("ERROR\n");
return 0;
}
printf("deviceI[%d], inodenum[%llu], hardlinkcount[%hu], filesize[%lld], blocksize[%d], blockcount[%lld] \n", buf.st_dev, buf.st_ino, buf.st_nlink, buf.st_size, buf.st_blksize, buf.st_blocks);
return 0;
}
deviceI[16777232], inodenum[20835549], hardlinkcount[1], filesize[30], blocksize[4096], blockcount[8]
파일 사이즈는 보통 자신이 차지하는 영역에 추가적으로 공간을 예약적으로 가지고 있다.
블럭 카운트는 추가적인 영역을 제외하고 계산
위에서 블록은 4KB 크기를 가지고 있으며, 8개의 블록이 사용되었다.